
classes = [
    {"name": "n_1", "age": 24, "grade": "A"},
    {"name": "n_2", "age": 23, "grade": "B"},
    {"name": "n_3", "age": 28, "grade": "A"},
    {"name": "n_4", "age": 24, "grade": "A"},
    {"name": "n_5", "age": 25, "grade": "C"},
    {"name": "n_6", "age": 21, "grade": "D"},
    {"name": "n_7", "age": 27, "grade": "A"},
]
classes.sort(key = lambda x: x["grade"])
print(classes)

# 注意：list.sort()完成后会自动更新列表的顺序，所以，不需要在l = list.sort()了，这是一个错误做法
f = filter(lambda x: True if x["grade"] == 'A' else False, classes)
print(list(f))


# 这个地方传入的是列表中的元素。注意，这个地方自己出现过问题
def ages(ele):
    ele["age"] += 1
    return ele

m = map(ages, classes)
print(list(m))
# 这里的map()映射的是，从列表classes中的元素来调用函数ages，从而得到年龄加一的功能
# 举个简单例子：
'''
def power(a):
    return a **2
l = [1, 2, 3, 4]
m = map(power, l)

最终结果是 l = [1,4,9,16]
小结：所以我们写函数，如果对象是列表，往往参数都是列表中的元素，不要因为列表中的元素不是数字，就不会写了
'''


# 使用递归函数重构斐波那契函数

def fibs(n):
    if n == 1:
        return 0
    elif n == 2:
        return 1
    return (fibs(n - 1) + fibs(n - 2))


num = int(input("请输入你要输入的项数："))
l = []
for i in range(1, num + 1):
c = fibs(i)
l.append(c)
print("斐波那契数列是：", l)
